package pkg

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/go-pay/gopay/alipay"
	"github.com/go-pay/xlog"
	"net/http"
)

func Pay(c *gin.Context) {
	// 解析异步通知的参数
	// req：*http.Request
	notifyReq, err := alipay.ParseNotifyToBodyMap(c.Request) // c.Request 是 gin 框架的写法
	if err != nil {
		xlog.Error(err)
		return
	}
	////或
	//// value：url.Values
	//notifyReq, err = alipay.ParseNotifyByURLValues()
	//if err != nil {
	//	xlog.Error(err)
	//	return
	//}

	// 支付宝异步通知验签（公钥模式）
	ok, err := alipay.VerifySign("", notifyReq)

	if err != nil {
		return
	}
	fmt.Println(ok)

	// 支付宝异步通知验签（公钥证书模式）
	//ok, err = alipay.VerifySignWithCert("alipayPublicCert.crt content", notifyReq)

	// 如果需要，可将 BodyMap 内数据，Unmarshal 到指定结构体指针 ptr
	//err = notifyReq.Unmarshal(ptr)

	// ====异步通知，返回支付宝平台的信息====
	// 文档：https://opendocs.alipay.com/open/203/105286
	// 程序执行完后必须打印输出“success”（不包含引号）。如果商户反馈给支付宝的字符不是success这7个字符，支付宝服务器会不断重发通知，直到超过24小时22分钟。一般情况下，25小时以内完成8次通知（通知的间隔频率一般是：4m,10m,10m,1h,2h,6h,15h）

	// 此写法是 gin 框架返回支付宝的写法
	c.String(http.StatusOK, "%s", "success")

	// 此写法是 echo 框架返回支付宝的写法
	//return c.String(http.StatusOK, "success")
}
